// 这个包用于定义验证规则
const joi = require("joi");

// 用户名的验证规则：得是字符串、字母和数字组合、最小长度1、最大长度10、必须得填
const username = joi.string().alphanum().min(1).max(10).required();

// 密码的验证规则
const password = joi
  .string()
  /**
   * ^匹配开头的,$匹配末尾的
   * \S表示非空格，\s是空白字符
   * 6~12位字符串
   * */
  .pattern(/^[\S]{6,12}$/)
  .required();

// 暴露验证规则对象-----注册和登录
exports.reg_login_schema = {
  // 表示需要对body里的数据进行验证
  body: {
    username,
    password,
  },
};

const id = joi.number().integer().min(1).required();

const nickname = joi.string().required();

const email = joi.string().email().required();

// 暴露验证规则对象-----更新用户信息
exports.update_user_schema = {
  body: {
    id,
    nickname,
    email,
  },
};

// 暴露验证规则对象-----验证旧新密:符合密码的规则,而且新密码不能和旧密码相同
exports.update_password_schema = {
  body: {
    oldPwd: password,
    /**
     * joi.ref(oldPwd) ----- 引用旧密码一样的规则
     * joi.not(joi.ref(oldPwd)) ----- 不能和旧密码规则一样,joi.not里面得放一个joi的返回值,因此的用引用joi.ref
     * concat(password) ----- 符合password的验证规则
     */
    newPwd: joi.not(password).concat(password),
  },
};

// dataUri() 指的是如下格式的字符串数据：
// 
const avatar = joi.string().dataUri().required();

// 暴露验证规则对象 ----- 验证头像url
exports.update_avatar_schema = {
  body: {
    avatar,
  },
};
